From: Jasper St. Pierre Date: Thu, 4 Apr 2013 18:47:38 +0000 (-0400) Subject: modalDialog: Destroy dialogs on close X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~4371 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=3dd6113a0a694d1deb444bafd16996a292772abb;p=gnome-shell.git modalDialog: Destroy dialogs on close It turns out that we never destroyed modal dialogs when closing them, causing them to still linger in the scene graph even when there were no references to them in the JS. The one case where we don't want to destroy modal dialogs after being closed is endSessionDialog, so provide a parameter that allows classes to override this behavior. https://bugzilla.gnome.org/show_bug.cgi?id=697295 --- diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js index b7850a484..d3225819a 100644 --- a/js/ui/endSessionDialog.js +++ b/js/ui/endSessionDialog.js @@ -225,7 +225,8 @@ const EndSessionDialog = new Lang.Class({ Extends: ModalDialog.ModalDialog, _init: function() { - this.parent({ styleClass: 'end-session-dialog' }); + this.parent({ styleClass: 'end-session-dialog', + destroyOnClose: false }); this._user = AccountsService.UserManager.get_default().get_user(GLib.get_user_name()); diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index 304733efb..beac7fe09 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -38,13 +38,15 @@ const ModalDialog = new Lang.Class({ styleClass: null, parentActor: Main.uiGroup, keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL, - shouldFadeIn: true }); + shouldFadeIn: true, + destroyOnClose: true }); this.state = State.CLOSED; this._hasModal = false; this._keybindingMode = params.keybindingMode; this._shellReactive = params.shellReactive; this._shouldFadeIn = params.shouldFadeIn; + this._destroyOnClose = params.destroyOnClose; this._group = new St.Widget({ visible: false, x: 0, @@ -277,6 +279,9 @@ const ModalDialog = new Lang.Class({ this.state = State.CLOSED; this._group.hide(); this.emit('closed'); + + if (this._destroyOnClose) + this.destroy(); }) }); },